package com.example.slogantv.base

import android.annotation.SuppressLint
import android.graphics.Color
import android.os.Build
import android.os.Bundle
import android.os.Handler
import android.os.Message
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import android.view.WindowManager
import androidx.appcompat.app.AppCompatActivity
import com.dueeeke.videoplayer.player.VideoView
import com.example.slogantv.R
import com.example.slogantv.utlis.StatusBarUtil

/**
 * 页面以及播放器共有逻辑封装
 * @param <T>
</T> */
@SuppressLint("Registered")
open class Base01<T : VideoView<*>?> : AppCompatActivity() {
    protected var mVideoView: T? = null
    protected open val layoutResId: Int
        protected get() = 0
    protected open val contentView: View?
        protected get() = null
    protected var mHandler: Handler? = null
    protected var dark = true
    protected var isChat = false
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        if (layoutResId != 0) {
            setContentView(layoutResId)
        } else if (contentView != null) {
            setContentView(contentView)
        }
        //消息处理器
        mHandler = object : Handler(mainLooper) {
            override fun handleMessage(msg: Message) {
                super.handleMessage(msg)
                //接受内部信息要重写该方法
                onHandlerMessage(msg)
            }
        }
        initView()
        if (isChat) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                val content = (findViewById<View>(R.id.content) as ViewGroup).getChildAt(0)
                if (content != null) {
                    content.fitsSystemWindows = true
                }
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    window.statusBarColor = Color.TRANSPARENT
                    //去除效果不佳的半透明状态栏(如果设置了的话)
                    window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
                    //这里的原理是直接设置了完全透明的状态栏，并且保留了内容延伸的效果
                    //全屏显示设置新的状态栏:延伸内容到状态栏
                    window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
                }
            }
        } else {
            StatusBarUtil.setRootViewFitsSystemWindows(this, false)
            //设置状态栏透明
            StatusBarUtil.setTranslucentStatus(this)
            //一般的手机的状态栏文字和图标都是白色的, 可如果你的应用也是纯白色的, 或导致状态栏文字看不清
            //所以如果你是这种情况,请使用以下代码, 设置状态使用深色文字图标风格, 否则你可以选择性注释掉这个if内容
            if (!StatusBarUtil.setStatusBarDarkTheme(this, dark)) {
                //如果不支持设置深色风格 为了兼容总不能让状态栏白白的看不清, 于是设置一个状态栏颜色为半透明,
                //这样半透明+白=灰, 状态栏的文字能看得清
                StatusBarUtil.setStatusBarColor(this, Color.parseColor("#ffffff"))
            }
        }
    }

    /**
     * 需要接受内部信息要重写该方法
     */
    protected open fun onHandlerMessage(msg: Message?) {}
    protected open fun initView() {}
    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        if (item.itemId == R.id.home) {
            finish()
        }
        return super.onOptionsItemSelected(item)
    }

    override fun onResume() {
        super.onResume()
        if (mVideoView != null) {
            mVideoView?.resume()
        }
    }

    override fun onPause() {
        super.onPause()
        if (mVideoView != null) {
            mVideoView?.pause()
        }
    }

    override fun onDestroy() {
        super.onDestroy()
        if (mVideoView != null) {
            mVideoView!!.release()
        }
    }

    override fun onBackPressed() {
        if (mVideoView == null || mVideoView!!.onBackPressed()) {
            super.onBackPressed()
        }
    }
}
